/*
* SMILParser
*
* Version 1.0
*
* Programmers: Jesse Louderback, Noah Pham, Chad Carpenter, and Marc Hindman
*/
package com.SmilDial;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {
	
    /** The parent context */
    private Context myContext;

    /** URL-Strings to some remote images. */    
    private String[] myRemoteImages;
    
    /** Simple Constructor saving the 'parent' context. */
    public ImageAdapter(Context c, String[] URLImages) { 
    	this.myContext = c; 
    	this.myRemoteImages = URLImages;
    }

    /** Returns the amount of images we have defined. */
    public int getCount() { 
    	return this.myRemoteImages.length; 
    }

    /* Use the array-Positions as unique IDs */
    public Object getItem(int position) { 
    	return position; 
    }
    
    public long getItemId(int position) { 
    	return position; 
    }

    /** 
     * Returns a new ImageView to be displayed, depending on the position 
     * passed. 
     */
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView i = new ImageView(this.myContext);

        try {
        	
            // Open a new URL and get the InputStream to load data from it.
            URL aURL = new URL(myRemoteImages[position]);
            URLConnection conn = aURL.openConnection();
            conn.connect();
            InputStream is = conn.getInputStream();
            
            // Buffered is always good for a performance plus.
            BufferedInputStream bis = new BufferedInputStream(is);
            
            // Decode url-data to a bitmap.
            Bitmap bm = BitmapFactory.decodeStream(bis);
            bis.close();
            is.close();
            
            // Apply the Bitmap to the ImageView that will be returned.
            i.setImageBitmap(bm);
        } catch (IOException e) {
        	
        	//i.setImageResource(R.drawable.error);
            Log.e("DEBUGTAG", "Remtoe Image Exception", e);
        }
        
        // Image should be scaled as width/height are set.
        i.setScaleType(ImageView.ScaleType.FIT_CENTER);
        
        // Set the Width/Height of the ImageView.
        i.setLayoutParams(new Gallery.LayoutParams(150, 150));
        return i;
    }

    /** 
     * Returns the size (0.0f to 1.0f) of the views
     * depending on the 'offset' to the center. 
     */
    public float getScale(boolean focused, int offset) {
    	
        // Formula: 1 / (2 ^ offset)
        return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset)));
    }
}

